При наведенні на якийсь регіон на карті він має виділятися на графіку за допомогою товщини лінії та її кольору.
При наведенні на якусь лінію на графіку відповідний їй регіон має виділятися на карті за допомогою прозорості.
import geopandas as gpd
import altair as alt
import pandas as pd
trends = pd.read_csv("population_trends.csv")
trends = trends[trends['region'] != 'Ukraine'] # clean up data
latest = trends[trends['year'] == trends['year'].max()]
ukraine = gpd.read_file('ukraine.json')
ukraine = ukraine[['NAME_1', 'geometry']]
ukraine.columns = ['region', 'geometry'] # need to rename columns for transform_lookup
highlight = alt.selection_single(on='mouseover', nearest=False, fields=['region'], empty='none') # add a single selection to highlight chart objects when shoving the mouse over
rate_map = alt.Chart(ukraine, title='Population rate of 2019 by region').transform_lookup(
lookup = 'region',
from_ = alt.LookupData(data = latest,
key = 'region',
fields=['rate'])
).mark_geoshape(color ='lightgray', stroke = 'white', strokeWidth = 1
).encode(
color = alt.Color('rate:Q', scale=alt.Scale(scheme='reds', reverse = True)),
opacity = alt.condition(highlight,
alt.value(0.5), alt.value(1)),
strokeWidth= alt.condition(highlight,
alt.value(2), alt.value(0.5)),
).add_selection(highlight) + alt.Chart(ukraine[ukraine['region'].isin(latest[latest['rate'].isna()]['region'].tolist())]).mark_geoshape(
fill = 'lightgray', stroke = 'white')
rate_map = rate_map.encode(tooltip = [
alt.Tooltip('region:N'),
alt.Tooltip('rate:Q')
]).properties(width = 600, height = 400)
rate_map
trends = trends[(trends['year'] >1988) & (trends['year'] < 2020)]
linear = alt.Chart(trends, title='Population increase\decrease rate by regions over years').mark_line().encode(
x = alt.X('year:Q', title='Year'),
y = alt.Y('rate:Q', title="Population change rate"),
color = alt.Color('region:N', title='Region'),
size = alt.condition(
highlight,
alt.value(5),alt.value(2)),
opacity = alt.condition(highlight,
alt.value(1), alt.value(0.7)),
tooltip = [alt.Tooltip('region:N', title='Region:')]
).add_selection(highlight).properties(width = 600, height = 400)
linear
alt.HConcatChart(hconcat=[rate_map, linear])